export const Enum = {
  flag: [
    { label: "是", value: 1 },
    { label: "否", value: 2 },
  ],
  menuType: [
    { label: "目录", value: 1 },
    { label: "菜单", value: 2 },
    { label: "操作", value: 3 },
    { label: "页面", value: 100 },
  ],
  mobileType: [
    { label: "安卓", value: 1 },
    { label: "苹果", value: 2 },
  ],
  areaType: [
    { label: "国家", value: 1 },
    { label: "省", value: 2 },
    { label: "市", value: 3 },
    { label: "县", value: 4 },
  ],
  configDataRule: [
    { label: "范围类型", value: 1 },
    { label: "正则类型", value: 2 },
  ],
  configType: [
    { label: "数值类型", value: 1 },
    { label: "布尔类型", value: 2 },
    { label: "日期类型", value: 3 },
    { label: "时间类型", value: 4 },
    { label: "日期时间", value: 5 },
    { label: "字符类型", value: 6 },
  ],
  usertype: [
    { label: "平台用户", value: 0 },
    // 租户用户
    { label: "系统用户", value: 1 },
    { label: "网格员", value: 2 },
    { label: "企业用户", value: 3 },
  ],
  userkind: [
    { label: "管理用户", value: 1 },
    { label: "普通用户", value: 2 },
  ],
  lockState: [
    { label: "已锁定", value: 1 },
    { label: "未锁定", value: 2 },
  ],
  //----------------------------------------
  // 租户状态
  SystemTenantStatus: [
    { label: "启用", value: 1 },
    { label: "停用", value: 2 },
  ],
  // 公司性质
  CompanyNature: [
    { label: "国有企业", value: 1 },
    { label: "集体所有制", value: 2 },
    { label: "私营企业", value: 3 },
    { label: "股份制企业", value: 4 },
    { label: "有限合伙企业", value: 5 },
    { label: "联营企业", value: 6 },
    { label: "外商投资企业", value: 7 },
    { label: "个人独资企业", value: 8 },
    { label: "港澳台", value: 9 },
    { label: "股份合作企业", value: 10 },
  ],
  // 组织类型
  SystemOrgnizType: [
    { label: "公司", value: 1 },
    { label: "部门", value: 2 },
  ],
  // 请求方式
  requestMethod: [
    { label: "POST", value: "POST" },
    { label: "GET", value: "GET" },
  ],
  // 日志类型
  logType:[
    { label: "登录日志", value: "LOGIN" },
    { label: "操作日志", value: "OPERATION" },
  ]
};

export const Enums = {
  ...Enum,
  defaultItem: {
    label: "所有",
    value: null,
  },
  getEnum(type, ...values) {
    let enums = Enum[type] || [];
    if (values.length > 0) {
      return enums.filter((e) => values.includes(e.value));
    }
    return enums;
  },
  getEnumItem(type, value) {
    let arr = this.getEnum(type).filter((item) => item.value === value);
    return arr.length > 0 ? arr[0] : {};
  },
  getLabel(type, value) {
    return this.getEnumItem(type, value).label || "";
  },
  getDefault(type) {
    return Enum[type] || [];
  },
  getSelect(type, ...values) {
    let enums = Enum[type] || [];
    if (values.length > 0) {
      return enums.filter((e) => values.find((v) => e.value === v));
    }
    return enums;
  },
  getSearch(type) {
    return [].concat(this.defaultItem, Enum[type] || []);
  },
  getInclude(type, ...values) {
    let enums = Enum[type] || [];
    if (values.length > 0) {
      return enums.filter((e) => values.find((v) => e.value === v));
    }
    return enums;
  },
  getExclude(type, ...values) {
    let enums = Enum[type] || [];
    if (values.length > 0) {
      return enums.filter((e) => !values.find((v) => e.value === v));
    }
    return enums;
  },
  getWithoutEmptyItem(type) {
    return (Enum[type] || []).filter(
      (item) => !["", undefined, null, "null"].includes(item.value)
    );
  },
  getEnumWithFilter(type, filter) {
    let enums = Enum[type] || [];
    if (Object.prototype.toString.call(filter) === "[object Object]") {
      const filterList = Object.entries(filter);
      return enums.filter((item) => {
        return filterList.every(([key, value]) => item[key] === value);
      });
    }
    return enums;
  },
};
